How To Build GNU Tar for ARM


Intro


In this How To we are going to build tar 1.27.1 with our GCC/G++ 4.8.2 cross-compiler. Be sure to start this build in a new terminal/tab to avoid any pollution from previous builds.

Tar Balls


Here is a list of source packages that we'll need for the build. You can either download them now or wait 'til later in the How To.
  • tar-1.27.1.tar.gz

Create a Workspace


I recommend creating a workspace under your /home/<your user>/ directory that is dedicated to this build. So let's fire up your terminal and run the following:
$ export TAR_SRC=~/workbench/tar/src
$ export TAR_BUILD=~/workbench/tar/build
$ mkdir -pv ~/workbench/tar
$ mkdir $TAR_SRC && mkdir $TAR_BUILD
$ cd $TAR_SRC

Gather the Sources


Now that we have a workspace created and we are currently in the src directory we can begin bringing down the sources and extracting them.

tar

$ wget http://ftp.gnu.org/gnu/tar/tar-1.27.1.tar.gz
$ tar -pxzf tar-1.27.1.tar.gz

Build Environment


To make things a little smoother let's setup some environment variables:
$ export INSTALLDIR=~/workbench/gcc-g++-4.8.2/arm
$ export PATH=$INSTALLDIR/bin:$PATH
$ export TARGETMACH=arm-none-linux-gnueabi
$ export BUILDMACH=i686-pc-linux-gnu
$ export CROSS=arm-none-linux-gnueabi
$ export CC=${CROSS}-gcc
$ export LD=${CROSS}-ld
$ export AS=${CROSS}-as
$ export CXX=${CROSS}-g++
NOTE: Depending on whether you are using a cross-compiler built from my other wikis you might need to change INSTALLDIR to point to your cross-compiler.

Build Tar


$ cd ../build/
$ ../src/tar-1.27.1/./configure --prefix=/home/<your user>/workbench/tar/final --host=$TARGETMACH
$ make
$ make install

Output


cd into the final directory and output its contents:
$ cd ../final/
$ ls
You should have the following directories:
  • bin
  • libexec
  • share

Make sure the binaries are for ARM:
$ cd bin/
$ file tar
bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
If you see something similar to above you're good to go ;-)

Lastly, move the contents of these directories, or the directories themselves if they do not already exist, to your custom Linux file system or dev board.